package net.zjitc.datasource.book;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

/**
 * @Author Administrator
 * @Date 2020/5/26 16:20
 * Dao层的实现类
 * 具体实现Book对象的增删改查操作
 **/
public class BookDaoDB implements BookDao {
    /* spring框架提供JdbcTemplate，简化执行SQL语句的操作 */
    JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
    /* 定义sql*/
    String sql = "";

    @Override
    public int insert(Book book) {
        /* 用户名不能重复
           1、调用方法判断用户名是否重复
              若返回值为空 表示不重复：
                1）准备insert sql
                2）利用JdbcTemplate 执行sql语句
                3）返回 i（添加是否成功）
              否则，表示重复
                返回-1
             */
        Book b = selectByName(book.getName());
        if (b == null) {
            sql = "insert into book(name,press,author,price) values(?,?,?,?)";
            /* 执行增删改操作使用update方法，
             *  传入sql，参数*/
            int i = template.update(sql,
                    book.getName(), book.getPress(), book.getAuthor(), book.getPrice());
            return i;
        } else {
            return -1;
        }

    }

    @Override
    public Book selectByName(String name) {
        /* 1、准备select语句
         *  2、对于查询语句，使用template的：
         *     1） queryForObject() 基本上返回结果是单条记录(对象)或者没有
         *     2） query() 返回多条记录（集合List）或者null
         *   这2个方法都需要传入3类参数：
         *     参数1： sql
         *     参数2：new BeanPropertyRowMapper<Book>(Book.class)
         *           作用：查询出数据库中的一条记录，自动封装成Book对象
         *     参数3：给？占位符赋值
         *           有几个问号，就会有几个赋值
         *     */
        sql = "select * from book where name=?";
        try {
            Book book = template.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), name);
            return book;
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return null;
        }
    }

    @Override
    public List<Book> selectAll() {
        sql = "select * from book";
        try {
            return template.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return null;
        }
    }

    @Override
    public int update(int id, Book book) {
        sql = "update book set name=?,press=?,author=?,price=? where id=?";
        return template.update(sql, book.getName(), book.getPress(),
                book.getAuthor(), book.getPrice(), book.getId());

    }

    @Override
    public int delete(int id) {
        sql = "delete from book where id=?";
        return template.update(sql, id);

    }
}
